public class Test {
    public static void f() {
        int a = 10;
        int b = 1;
        int c;
        int[] ints = {1, 2, 3};
        try {//努力地执行当前try代码片段
            // 省略了20行代码，一旦执行了throw，后面的代码就不能执行了
            if (b == 0) throw new ArithmeticException("除数不能为零！");
            c = a / b;//进行除法运算
            // 省略了50行代码
            b = ints[3];
            System.out.println(c);
        } catch (ArithmeticException ex) {
            System.out.println(ex.getMessage());
        } catch (ArrayIndexOutOfBoundsException ex) {
            System.out.println("数组不能越界！");
            ex.printStackTrace();
            System.out.println(ex.getMessage());
        } catch (NullPointerException ex) {
            System.out.println("出现空引用错误了！");
        } catch (Exception ex) {//捕获try代码片段的所有的异常
            System.out.println("除数不能为零！");
        } finally {
            // 不论前面的try和catch如何执行，finally部分都会执行
            // 代码省略
            b = 10;
        }
    }
    public static void main(String[] args) throws ArithmeticException {
        int a = 10;
        int b = 1;
        int c;
        int[] ints = {1, 2, 3};
        // 省略了20行代码，一旦执行了throw，后面的代码就不能执行了
        if (b == 0) throw new ArithmeticException("除数不能为零！");
        c = a / b;//进行除法运算
        // 省略了50行代码
        b = ints[3];
        System.out.println(c);
    }
}
